package com.cskaoyan.javase.basic._1identifier;
/**
 * 标识符的命名规范
 *
 * 问题1：什么是标识符？
 * 上面我们提到过，编程的过程就是变量使用的过程。在这个使用变量的过程中，毫无疑问是需要知道变量的名字，才能更方便得去使用它。而在Java代码中，使用标识符 表示各种各样的名字，也包括变量名。
 *
 *  问题2：标识符有什么用？
 * 上面已经说过了，标识符是一个表示名字的字符串。
 *
 *  问题3：需要标识符起名字的常见结构有哪些？
 *  主要有：
 *  类名（包括后面会学习的接口名、注解名等）
 *  方法名（main就是一个方法名）
 *  变量名
 *  包名
 *
 *  语法要求:
 *
 *  标识符的开头必须是：
 * 字母（A~Z 和 a~z）
 * 下划线（_）
 * 美元符号（$）
 * Unicode 字符集中编号为0xC0以及它后面的所有符号
 *      0x表示一个十六进制的数
 *      这个字符包括世界上绝大多数国家的语言,但是不包括ASCII码表中的字符
 * 主要是不能是数字
 * 标识符的组成必须是：
 * 数字（0~9）
 * 字母（A~Z 和 a~z）
 * 美元符号（$）
 * 下划线（_）
 * Unicode 字符集中编号为0xC0以及它后面的所有符号
 *
 * 以上都是语法上的要求,但是实际开发中,更要遵守约定俗成的命名规范
 * Java程序员的第一步,应该从写好标识符的命名规范开始.
 * 驼峰命名命名法:
 *
 * 在计算机中，起名字是很常见的操作，为了起好名字，驼峰命名法就被发明了。
 * 所谓驼峰，指的是当多个单词共同组成一个字符串时，不同单词的大写和小写间隔起来，形成一种像驼峰一样的凹凸，故称之为驼峰命名法。
 * 使用驼峰命名法可以清晰得看到不同单词组成的新字符串。
 * 驼峰命名法主要有两种：
 * 小驼峰式命名法
 * 多个单词组合成一个字符串
 * 第一个单词的首字母小写 。
 * 从第二个单词开始，首字母都要大写。
 * 例如：myName，myFirstJavaProgram,name,age
 *
 * 大驼峰式命名法
 * 多个单词组合成一个字符串
 * 第一个单词的首字母 大写 。
 * 从第二个单词开始，首字母都要大写
 * 例如：MyName，MyFirstJavaProgram,Name,Age
 *
 * 接下来分别说明下列结构的命名规范:
 * 类名（包括后面会学习的接口名、注解名等）
 *      应该使用大驼峰式的命名规范,应该使用合法的英文单词,不要使用拼音,更不要中英混合
 *      当然特殊情况除外,比如beijing,alibaba,baidu等等
 *      类名要起的有含义,有意义,看到这个类名,可以大概知道这个类有啥用
 *
 * 方法名（main就是一个方法名）
 *      小驼峰式命名,具体等讲到方法再说.
 *
 * 变量名
 *      小驼峰式命名,应该使用合法的英文单词,不要使用拼音,更不要中英混合
 *      变量名要起的有含义,有意义,看到这个变量名,可以大概知道这个变量有啥用
 *      实际开发中,千万不要命名变量为a,b,c,d等等
 *
 * 合理的命名的代码是"自解释"的,这样可以减少写冗余的注释.
 *
 * 包名
 * 包名的命名,一般来说,绝大多数公司项目包名的命名会以"反转公司域名"作为开头
 *      比如百度: com.baidu
 *      王道: com.cskaoyan
 *      包名应该全部小写,包名不存在大写,即便是专有名词也要小写china
 *      而且注意一级包名应该最好只有一个单词,
 *      而且这个单词如果是名词,最好用单数形式,不要用复数形式.
 *      比较典型的就是包"util"是用来存放工具类的,用单数形式
 *  约定:
 *      1.包名正常情况下,不应该有下划线存在,但是为了让大家清楚看到学习知识点的流程,我给包名加上下划线和序号.
 *      我这么做目的是为了让你课下看代码更方便,请大家日常学习工作中不要这么用!
 *      2.命名规范如此重要,将是以后老师看代码较为关注的一个重点.一旦发现童鞋命名有问题,第一次私聊,第二次跑步!
 *
 *
 * 除此之外，还有一些统一的规范，也必须要遵守：
 *
 * 标识符的命名开头和结尾都禁止使用下划线"_"和美元符号"$"。
 * 任何标识符的命名都禁止使用莫名其妙的字母组合、拼音或者拼音英文组合，更不能直接使用中文。特殊地如baidu、beijing或者和业务相关的拼音除外。
 *
 * @since 11:45
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // int 123a;
        // Non-ASCII characters in an com.cskaoyan.javase.oop1._1identifier.
        // 言下之意是,建议使用ascii码表中的字符
        int 长风 = 10;
        int Class;
        // int DataClass#;
        // int _98.3;
        /*
            空格,回车,制表等看起来是空空的 什么都没有
            其实也是一个字符串,而且是常用字符
            都在ASCII码表中
         */
        // int Hello  World;

        int 好きだ;

        // 不规范的命名
        // int _123;
        // int _;
    }
}
class Student{}
class Teacher{}
class A{}
// 从下面开始都是错误的命名
class a{}
class b{}
class student{}